package net.jueb.protoServer.message.mapping;
import net.jueb.protoServer.controller.ServiceController;

/**
 * 消息映射器
 * @author Administrator
 * isMatch方法的实现决定了消息类型M与其控制器的匹配规则
 * @param <M>
 */
public abstract class MessageMapping<M> {
	/**
	 * 当macthByControllerId方法未匹配到时，使用该方法匹配
	 * 根据传入的消息，判断消息是否匹配对应类型的控制器
	 * @param msg
	 * @param controller
	 * @return
	 */
	public abstract boolean isMatch(M msg,ServiceController<?>  controller);
	
	/**
	 * 该方法优先级最高
	 * 根据消息的指定控制器ID来匹配
	 * @param msg 要映射的消息
	 * @return 返回消息映射到目标控制器的id 
	 */
	public abstract int getControllerIdByMsg(M msg);

}
